<?php

class Util
{	
	/**
	 * Returns the JSON representation of a value
	 * 
	 * @param  $value The value being encoded
	 * @return the JSON representation of a value
	 */
	public static function getJsonData($value)
	{
		$json = json_encode($value);
		//
		return $json;
		// 
		return preg_replace("#\\\u([0-9a-f]+)#ie", "iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))", $json);
	}


    /**
     * Get the client ip address
     * 
     * @param  void
     * @return String    the client ip address
     */
	public static function getClientIp()
	{
		return @$_SERVER['HTTP_X_FORWARDED_FOR'];
		
		/*$ip = "";
		if(isset($_SERVER['HTTP_CLIENT_IP']) && !empty($_SERVER['HTTP_CLIENT_IP'])) {
		    $ip = $_SERVER['HTTP_CLIENT_IP'];
		}else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && !empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
		    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
		}else{
		    $ip = $_SERVER['REMOTE_ADDR'];
		}
		return $ip;*/
	}
 
	public static function HTTPStatus($num)
	{
		$http = array (
			100 => "HTTP/1.1 100 Continue",
			101 => "HTTP/1.1 101 Switching Protocols",
			200 => "HTTP/1.1 200 OK",
			201 => "HTTP/1.1 201 Created",
			202 => "HTTP/1.1 202 Accepted",
			203 => "HTTP/1.1 203 Non-Authoritative Information",
			204 => "HTTP/1.1 204 No Content",
			205 => "HTTP/1.1 205 Reset Content",
			206 => "HTTP/1.1 206 Partial Content",
			300 => "HTTP/1.1 300 Multiple Choices",
			301 => "HTTP/1.1 301 Moved Permanently",
			302 => "HTTP/1.1 302 Found",
			303 => "HTTP/1.1 303 See Other",
			304 => "HTTP/1.1 304 Not Modified",
			305 => "HTTP/1.1 305 Use Proxy",
			307 => "HTTP/1.1 307 Temporary Redirect",
			400 => "HTTP/1.1 400 Bad Request",
			401 => "HTTP/1.1 401 Unauthorized",
			402 => "HTTP/1.1 402 Payment Required",
			403 => "HTTP/1.1 403 Forbidden",
			404 => "HTTP/1.1 404 Not Found",
			405 => "HTTP/1.1 405 Method Not Allowed",
			406 => "HTTP/1.1 406 Not Acceptable",
			407 => "HTTP/1.1 407 Proxy Authentication Required",
			408 => "HTTP/1.1 408 Request Time-out",
			409 => "HTTP/1.1 409 Conflict",
			410 => "HTTP/1.1 410 Gone",
			411 => "HTTP/1.1 411 Length Required",
			412 => "HTTP/1.1 412 Precondition Failed",
			413 => "HTTP/1.1 413 Request Entity Too Large",
			414 => "HTTP/1.1 414 Request-URI Too Large",
			415 => "HTTP/1.1 415 Unsupported Media Type",
			416 => "HTTP/1.1 416 Requested range not satisfiable",
			417 => "HTTP/1.1 417 Expectation Failed",
			500 => "HTTP/1.1 500 Internal Server Error",
			501 => "HTTP/1.1 501 Not Implemented",
			502 => "HTTP/1.1 502 Bad Gateway",
			503 => "HTTP/1.1 503 Service Unavailable",
			504 => "HTTP/1.1 504 Gateway Time-out"
		);
		return $http[$num];
	}
	
	public static function ListJqeffectsInfo($path, $n = 0)
	{
		static $jqEffectsInfos = array();
		static $currPath = '';
		$handle = opendir($path);
		while($file = readdir($handle)){
	  		if($file == '.' || $file == '..'){
	   			continue;
	  		}
	  		$newFilePath = $path.DIRECTORY_SEPARATOR.$file;
	  		$baseName = basename($newFilePath);
	  		if($baseName == '.svn'){
	  			continue;
	  		}
	  		if(is_dir($newFilePath)){
	   			$currPath = $baseName;
	   			self::ListJqeffectsInfo($newFilePath, $n + 1);
	  		}
	  		if(is_file($newFilePath)){
	  			list($fileName, $fileType) = explode('.', $baseName);
	  			if(in_array($fileType, PublicVars::$illusFileType)){
	  				$jqEffectsInfos[$currPath][$fileType] = iconv('gb2312', 'utf-8', file_get_contents($newFilePath));
	  			}else{
	  				$jqEffectsInfos[$currPath][$fileType] = $baseName;
	  			}
	  		}
	 	}
	 	closedir($handle);
	 	
	 	if($n == 0){
	 		$ret = $jqEffectsInfos;
	 		$jqEffectsInfos = array();
	 		return $ret;
	 	}
	}
	
	public static function UrlParamEncode($realVal)
	{
		$realVal = $realVal . '6ahm1hamlet';
		
		$realVal = base64_encode($realVal);
		return base64_encode($realVal);
	}
	public static function UrlParamDecode($encodeVal)
	{
		$decodeVal = base64_decode($encodeVal);
		$decodeVal = base64_decode($decodeVal);
		
		return str_replace('6ahm1hamlet', '', $decodeVal);
	}
}
